package com.ctshk.task.worker.processors;

import com.ctshk.rpc.scenic.service.IScenicProductService;
import com.github.kfcfans.powerjob.worker.core.processor.ProcessResult;
import com.github.kfcfans.powerjob.worker.core.processor.TaskContext;
import com.github.kfcfans.powerjob.worker.core.processor.sdk.BasicProcessor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

/**
 * <p>
 * 中旅网-APP 景点门票 调度模块
 * </p>
 *
 * @author 黄先
 */
@Slf4j
@Component
public class ScenicTicketEsProcessor implements BasicProcessor {
    //    // 索引名称
//    private static final String indexName = "scenic_ticket_online";
//
    @DubboReference
    IScenicProductService iScenicProductService;
//
//    @Autowired
//    RestHighLevelClient restHighLevelClient;
//
//    // 扫描起始时间
//    private static LocalDateTime lastModifiedTime;

    @Override
    public ProcessResult process(TaskContext taskContext) throws Exception {
        log.info("景点门票同步ES增量和变更数据。");
//        boolean resultFlag = putData();
        boolean resultFlag = (boolean) iScenicProductService.synTaskScenicByEs().getData();
        log.info("景点门票同步ES增量和变更响应：" + resultFlag);
        ProcessResult processResult = new ProcessResult();
        processResult.setSuccess(resultFlag);
        return processResult;
    }

//    public boolean createIndex() {
//        try {
//            CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName);
//
//            Map<String, Object> mapping = new HashMap<>();
//            Map<String, Object> properties = new HashMap<>();
//
//            // 文本类型
//            Map<String, Object> typeMap = new HashMap<>();
//            typeMap.put("type", "keyword");
//            // 时间类型
//            Map<String, Object> timeMap = new HashMap<>();
//            timeMap.put("type", "date");
//
//            List<String> fields = new ArrayList<>();
//            fields.add("id");
//
//            // 渠道ID
//            fields.add("channelId");
//            // 渠道名称
//            fields.add("channelName");
//            // 策略ID
//            fields.add("strategyId");
//            // 策略名称
//            fields.add("strategyName");
//            // 产品ID
//            fields.add("productId");
//            // 产品名称
//            fields.add("productName");
//            // 是否推荐
//            fields.add("isRecommend");
//            // 城市ID
//            fields.add("cityId");
//            // 城市名称
//            fields.add("cityName");
//            // 产品描述
//            fields.add("productIntroduces");
//            // 主题JSON
//            fields.add("themeJson");
//            // 图片JSON
//            fields.add("photosJson");
//            // 预订服务费类型
//            fields.add("reserveChargeType");
//            // 预订服务费
//            fields.add("reserveCharge");
//            // 加幅类型
//            fields.add("adjustType");
//            // 加幅金额
//            fields.add("amount");
//            // 加幅百分比
//            fields.add("precent");
//            // 销售开始时间
//            fields.add("saleTimeBegin");
//            // 销售结束时间
//            fields.add("saleTimeEnd");
//            // 产品修改时间
//            fields.add("gmtModified");
//            // 上架状态
//            fields.add("status");
//            // 售卖状态
//            fields.add("saleStatus");
//            // 产品删除状态
//            fields.add("isDeleted");
//            // 产品成本价
//            fields.add("costPrice");
//            // 汇率
//            fields.add("exchangeRate");
//            // 门票类型
//            fields.add("attr2Name");
//            // 门票规格
//            fields.add("attr1Name");
//            // 已销售数量
//            fields.add("soldStock");
//            // 负责人ID
//            fields.add("chargeUserId");
//            // 负责人名称
//            fields.add("chargeUser");
//            // 供应商ID
//            fields.add("supplierId");
//            // 供应商名称
//            fields.add("supplierName");
//            // 是否需要填写联系人信息
//            fields.add("needInfo");
//            // 入园须知
//            fields.add("admissionNotes");
//            // 预订后是否可退
//            fields.add("allowRefund");
//            // 产品分类名称
//            fields.add("productTypeName");
//            // 规格ID
//            fields.add("attrId");
//            // 几日有效
//            fields.add("validDay");
//
//            for (String field : fields) {
//                properties.put(field, JSON.parse(JSON.toJSONString(typeMap)));
//            }
//
//            mapping.put("properties", properties);
//            createIndexRequest.mapping(JSON.toJSONString(mapping), XContentType.JSON);
//            restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//
//    public boolean deleteIndex() {
//        try {
//            DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(indexName);
//            restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//
//    public boolean putData() {
//        try {
//            // 判断索引是否存在
//            GetIndexRequest getIndexRequest = new GetIndexRequest(indexName);
//            boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
//            if (!exists) {
//                // 不存在则创建
//                createIndex();
//                lastModifiedTime = null;
//            }
//
//            if (lastModifiedTime == null) {
//                // 全量更新操作 1.删除索引并重新添加数据
//                if (deleteIndex()) {
//                    createIndex();
//                    // 查询所有的数据然后新增到参数中
//                    Result<List<ScenicProductEsDTO>> listResult = iScenicProductService.queryListByEs();
//                    log.info("查询语句响应结果：" + listResult.getData().size());
//                    if (listResult.isSuccess()) {
//                        List<ScenicProductEsDTO> data = listResult.getData();
//                        for (ScenicProductEsDTO item : data) {
//                            IndexRequest indexRequest = new IndexRequest(indexName);
//                            indexRequest.id(String.valueOf(item.getProductId()));
//                            indexRequest.source(JSON.toJSONString(item), XContentType.JSON);
//                            try {
//                                restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
//                            } catch (Exception e) {
//                                e.printStackTrace();
//                            }
//                        }
//                        // 将最后一个产品的更新时间作为检查时间，而不是当前调度时间
//                        if (data.size() > 0) {
//                            lastModifiedTime = data.get(0).getGmtModified();
//                        }
//                    }
//                }
//            } else {
//                // 增量更新操作 1. 查询时间之后的数据
//                String formatTime = lastModifiedTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//                Result<List<ScenicProductEsDTO>> listResult = iScenicProductService.queryListByEsAndGmtModified(formatTime);
//                log.info("ADD查询语句响应结果：" + listResult.getData().size());
//                if (listResult.isSuccess()) {
//                    List<ScenicProductEsDTO> data = listResult.getData();
//                    for (ScenicProductEsDTO item : data) {
//                        // 查询数据是否存在
//                        GetRequest getRequest = new GetRequest(indexName);
//                        getRequest.id(String.valueOf(item.getProductId()));
//                        boolean haveFlag = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
//                        if (!haveFlag) {
//                            // 创建
//                            IndexRequest indexRequest = new IndexRequest(indexName);
//                            indexRequest.id(String.valueOf(item.getProductId()));
//                            indexRequest.source(JSON.toJSONString(item), XContentType.JSON);
//                            restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
//                        } else {
//                            // 更新
//                            UpdateRequest updateRequest = new UpdateRequest();
//                            updateRequest.index(indexName);
//                            updateRequest.id(String.valueOf(item.getProductId()));
//                            updateRequest.doc(JSON.toJSONString(item), XContentType.JSON);
//                            restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
//                        }
//                    }
//                    // 将最后一个产品的更新时间作为检查时间，而不是当前调度时间
//                    if (data.size() > 0) {
//                        lastModifiedTime = data.get(0).getGmtModified();
//                    }
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }

}
